home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 051-075 / disk_061 / microemacs / readme < prev    next >
Text File  |  1992-05-06  |  21KB  |  601 lines

  1.         MicroEMACS 3.8b Release Notes
  2.  
  3. **********************************************************************
  4.  
  5.     (C)opyright 1987 by Daniel M. Lawrence
  6.     MicroEMACS 3.8 can be copied and distributed freely for any
  7.     non-commercial purposes. MicroEMACS 3.8 can only be incorporated
  8.     into commercial software with the permission of the current author.
  9.  
  10. (    Notice the copyright.....a number of large companies decided to use
  11. MicroEMACS 3.7 and 3.7i as the shell of their products, and several of
  12. the ones I contacted were not even courteos enough to send me their
  13. product for my personal use.  I am not out to make a fortune on this,
  14. but a little common courtesy would be appreciated.)
  15.  
  16. **********************************************************************
  17.  
  18.     It has been quite a while since the last realease and there are
  19. a large number of new features and enhancements to old features.  There
  20. is now a full extension language and there is also support nearly
  21. completed for a number of newer 68000 machines.  The edit history at the
  22. beginning of the MAIN.C file details the changes. 
  23.  
  24.     MicroEMACS 3.8 is availible in a couple of different ways. 
  25. First, it is availible via my bulletin board system..... 
  26.  
  27.     The Programmer's Room
  28.     FIDO 201/2
  29.     (317) 742-5533
  30.     24 hours  300/1200 baud
  31.  
  32.     Also it should be online on the following BBS's:
  33.  
  34.     The Starship Trooper    Fido 201/1    (317) 423-2281    2400
  35.     Avatar            Fido 201/4    (317) 497-1970    1200
  36.  
  37.     There it is arranged as three MSDOS .ARC files, EMACSDOC.ARC
  38. which contains the documentation and command files, EMACSSRC.ARC which
  39. contains the sources and the UNIX Makefile, and EMACSEXE.EXE which
  40. contains the MSDOS executables.  Also all the various executables are
  41. availibile individualy. 
  42.  
  43. EMACSDOC.ARC includes the files:
  44.  
  45.     README        This file
  46.     
  47.     EMACS.RC    Standard startup file
  48.     ME110.RC    HP110 startup file
  49.     ME150.RC    HP150 startup file
  50.     
  51.     
  52.     EMACS.HLP    Online help file
  53.     EMACS.KEY    Cammond wallchart
  54.     EMACS.TUT    Online tutorial
  55.     EMACS.MSS       Emacs Introduction document
  56.     EMACS1.MSS    Emacs Reference guide
  57.     IBMFN.LST    IBM-PC function list
  58.     MAGIC.DOC    Regular partern matching bulletin
  59.     
  60.     AZMAP.CMD    Translate .SYM files to .MAP
  61.     BDATA.CMD    BASIS Data statement builder
  62.     MENU.CMD    Sample Menu system
  63.     MENU1           datafile for menu syste
  64.  
  65. EMACSSRC.ARC includes the files:
  66.  
  67.     ANSI.C        ANSI screen driver
  68.     BASIC.C        basic cursor movement
  69.     BIND.C        key binding commands
  70.     BUFFER.C    buffer manipulation commands
  71.     CRYPT.C        encryption functions
  72.     DG10.C        Data General 10 screen driver
  73.     DISPLAY.C    main display driver
  74.     EBIND.H        binding list
  75.     EDEF.H        global variable declarations
  76.     EFUNC.H        function name list
  77.     EGAPC.C        EGA screen driver
  78.     EPATH.H        default path settings
  79.     ESEARCH.H    search global declarations
  80.     ESTRUCT.H    configuration and structure definitions
  81.     EVAL.C        expresion evaluator
  82.     EVAR.H        EMACS macro variable declarations
  83.     EXEC.C        macro execution functions
  84.     FILE.C        user file functions
  85.     FILEIO.C    low level file I/O driver
  86.     HP110.C        HP110 screen driver
  87.     HP150.C        HP150(A or C) screen driver
  88.     IBMPC.C        IBM-PC CGA and MONOCHROME driver
  89.     INPUT.C        low level user input driver
  90.     ISEARCH.C    incremental search functions
  91.     LINE.C        text line manipulation functions
  92.     LOCK.C        file locking functions
  93.     MAIN.C        argument parsing and command loop
  94.     RANDOM.C    other random user functions
  95.     REGION.C    region cut & paste functions
  96.     SEARCH.C    search and replace functions
  97.     SPAWN.C        OS interface driver
  98.     ST520.C        ATARI ST1040 screen driver [not verified]
  99.     TCAP.C        Termcap screen driver
  100.     TERMIO.C    low level I/O driver
  101.     TIPC.C        TI-PC screen driver
  102.     VMSVT.C        VMS screen driver
  103.     VT52.C        VT52 screen driver
  104.     WINDOW.C    window manipulation functions
  105.     WORD.C        word manipulation functions
  106.  
  107. EMACSEXE.ARC includes the files:
  108.  
  109.     MEIBM.EXE    IBM-PC CGA and MONO version
  110.     MEEGA.EXE    IBM-PC EGA version
  111.     MEANSI.EXE    MSDOS ANSI graphics version
  112.     ME110.EXE    HP110 portable version
  113.     ME150.EX    HP150 version
  114.  
  115.     Also MicroEMACS should be availible from USENET via the
  116. mod.sources notegroup, or its archives. A number of sites also make
  117. MicroEMACS availible via FTP. Watch USENET news for info on these.
  118.  
  119.     MicroSCRIBE 1.0, which I had hoped to have ready by now, is only
  120. about half written.  MicroEMACS took up more of my time in updates then
  121. I had expected, however having this fairly advanced, and hopefully
  122. fairly stable version, I can get back to getting MicroSCRIBE written. 
  123. Also in the works for a later release is a spell checker (called
  124. MicroSPELL rather predictably) and sometime next year, a integrated
  125. thesaurus program. 
  126.  
  127.     A more customized MicroEMACS for the Macintosh, the Amiga and
  128. the 1040ST will probably become availible in the next couple of months. 
  129. Support for the mouse, standard file boxes, pull down menus and
  130. different resolutions will be included.  If you can be of help in
  131. getting this ready, please contact me. 
  132.  
  133.     As before, I will continue to support these programs, and
  134. encourage everyone to spread them around as much as they can. If you
  135. make what you think are changes that are usefull to many, send me the
  136. updates, and as time permits, I will encorporate the ones I understand,
  137. and agree with into the master sources. Being overswamped with mailers,
  138. I have discontinued my mailing offer, but if you have a special problem
  139. getting hold of MicroEMACS, contact me and we can work something out for
  140. you.
  141.  
  142.     USmail:    Daniel Lawrence
  143.         617 New York St
  144.         Lafayette, IN 47901
  145.  
  146.     UUCP:    ihnp4!pur-ee!pur-phy!duncan!lawrence
  147.     or    ihnp4!itivax!duncan!lawrence
  148.     ARPA:    nwd@j.cc.purdue.edu
  149.     FIDO:    The Programmer's Room 201/2
  150.         (317) 742-5533
  151.     ATT:    (317) 742-5153
  152.  
  153.  
  154.  
  155.  
  156.         New Features
  157.         ============
  158.  
  159. ***    Path Searching
  160.  
  161.     If the OS of the operating system MicroEMACS is running under
  162. has environmental variables, MicroEMACS will read in the PATH variable
  163. as a list of directories in which to look for its startup and help
  164. files, in place of the list in the epath.h file.
  165.  
  166. ***    Bindable Prefixes
  167.  
  168.     All the prefix keys can now be rebound. This includes:
  169.  
  170.         meta-prefix        <ESC>
  171.         ctlx-prefix        ^X
  172.         universal-argument    ^U
  173.         quote-character        ^Q
  174.  
  175. ***    HP150 function keys
  176.  
  177.     can now both be labeled and bound.
  178.  
  179. ***    New Help Function
  180.  
  181.     The APROPOS (M-A) function prompts for a string, and then
  182. prepares a list of all named functions that contain the string. This is
  183. usefull for finding all comands that deal with one topic.
  184.  
  185. ***    File Encryption
  186.  
  187.     Text files can now be encrypted (and decrypted <very useful>).
  188. The encryption method (written by Dana Hoggat) results in ALL legal
  189. printing characters, leaving files suitable for mailing and moving
  190. around between systems. The -k <encryption key> command line switch
  191. places the first file into the edit buffer using the named key. CRYPT is
  192. a mode which can be set on any buffer, and set-encryption-key (M-E) sets
  193. the encryption key of the current buffer. If you attempt to write out a
  194. buffer in crypt mode without specifying the key, MicroEMACS will
  195. automatically prompt you for it.
  196.  
  197. ***    Keyboard Macros rewritten
  198.  
  199.     The code for processing keyboard macros now records the responses
  200. to all prompts as well as just the command keystrokes.
  201.  
  202. ***    Restrictive Mode
  203.  
  204.     The -r command line switch prevents EMACS from executing many of
  205. its commands which would allow you to break out of it, or edit files
  206. other then the ones named on the command line.  This is usefull for
  207. products that need to restrict access to the OS from inside the editor
  208. (for example, BBS systems).
  209.  
  210. ***    Word wrap made more flexible
  211.  
  212.     When emacs determined it is time to word wrap (when in wrap
  213. mode) it calls the function which is bound to the illegal keystroke,
  214. M-FNW. This keystroke is normally bound to wrap-word (M-FNW), but can be
  215. rebound by the user so EMACS can do different things at wrap time (like
  216. auto indention in different languages).
  217.  
  218. ***    Fence Matching
  219.  
  220.     The goto-matching-fence (M-^F) command jumps the cursor to the
  221. matching fence, or beeps if there is none.
  222.  
  223. ***    Dynamic Screen Re-sizing
  224.  
  225.     The size that EMACS uses for editing can be changed with the
  226. change-screen-size (M-^S) and change-screen-width (M-^T) commands. These
  227. can then be usefull in integrating EMACS on window based machines.
  228.  
  229. ***    IBMPC drivers combined...
  230.  
  231.     The IBM-PC CGA and MONOCHROME drivers have been combined into
  232. one driver which will look up the graphics adapter type at startup and
  233. adjust accordingly.
  234.  
  235. ***    EXTENTION LANGUAGE
  236.  
  237.     MicroEMACS is now equipped with a fully functional extention
  238. language in which to write macros.  These macros can be saved, recalled
  239. and bound to keystrokes, thus allowing a high degree of customization. 
  240. What follows is an exerpt from what will become the new MicroEMACS
  241. reference manual. 
  242.  
  243. Chapter x:        MicroEMACS Macros
  244.  
  245.     Macros are programs that are used to customize the editor and to
  246. perform complicated editing tasks.  They may be stored in files or
  247. buffers and may be executed using an appropriate command, or bound to a
  248. particular keystroke.  Portions of the standard start-up file are
  249. impliment via macros, as well as the example menu system.  The
  250. execute-macro-<n> editor commands cause the macros, numbered from 1 to
  251. 40, to be executed.  Macros are stored by executing files that contain
  252. the store-macro command.
  253.  
  254.     There are many different aspects to the macro langage within
  255. MicroEMACS.  Editor commands are the various commands that manipulate
  256. text, buffers, windows, etc, within the editor.  Directives are commands
  257. which control what lines get executed within a macro.  Also there are
  258. various types of variables.  Environmental variables both control and
  259. report on different aspects of the editor.  User variables hold string
  260. values which may be changed and inspected.  Buffer variables allow text
  261. to be placed into variables.  Interactive variable allow the program to
  262. prompt the user for information.  Functions can be used to manipulate
  263. all these variables. 
  264.  
  265. x.00    Variables
  266.  
  267.     Variables in MicroEMACS can be used to return values within
  268. expressions, as repeat counts to editing commands, or as text to be
  269. inserted into buffers and messages.  The value of these variables is set
  270. using the set (^X-A) command.  For example, to set the current fill
  271. column to 64 characters, the following macro line would be used:
  272.  
  273.     set $fillcol 64
  274.  
  275.     or to have the contents of %NAME inserted at the point in the
  276. current buffer, the command to use would be:
  277.  
  278.     insert-string %name
  279.  
  280.  
  281. x.01    Environmental Variables
  282.  
  283.     "What good is a quote if you can't change it?"
  284.  
  285.     These variables are used to change different aspects of the way
  286. the editor works.  Also they will return the current settings if used as
  287. part of an expresion.  All environmental variable names begin with a
  288. dollar sign ($). 
  289.  
  290.     $fillcol    Current fill column
  291.     $pagelen    Number of screen lines used currently
  292.     $curwidth    Number of columns used currently
  293.     $curcol        Current column of point in current buffer
  294.     $curline    Current line of point in current buffer
  295.     $flicker    Flicker Flag
  296.                 set to TRUE if IBM CGA
  297.                 set to FALSE for most others
  298.     $cbufname    Name of the current buffer
  299.     $cfname        File name of the current buffer
  300.     $sres        Current screen resolution
  301.             (CGA or MONO on the IBM-PC driver...
  302.              EGA on the EGA driver
  303.              LOW MEDIUM or HIGH on the Atari ST1040
  304.              NORMAL on all others)
  305.     $debug        Flag to trigger macro debugging (try it...
  306.                 you'll like it!)
  307.     $status        return status of the success of the last command
  308.             (TRUE or FALSE) usually used with !force
  309.  
  310.     Obviously, many more of these variables will be availible in
  311. future releases of MicroEMACS. (Yes, send a vote for your favorite new
  312. environmental variables today).
  313.  
  314. x.02    User variables
  315.  
  316.     User variables allow you, the user, to store strings and
  317. manipulate them.  These strings can be pieces of text, numbers (in text
  318. form), or the logical values TRUE and FALSE.  These variables can be
  319. combined, tested, inserted into buffers, and otherwise used to control
  320. the way your macros execute. At the moment, up to 100 user variables may
  321. be in use in one editing session.  All users variable names must begin
  322. with a percent sign (%) and may contain any printing characters.  Only
  323. the first 10 characters are significant (ie differences beyond the tenth
  324. character are ignored). Most operators will truncate strings to a length
  325. of 128 characters.
  326.  
  327. x.03    Buffer Variables
  328.  
  329.     Buffer variables are special in that they can only be queried
  330. and cannot be set.  What buffer variables are is a way to take text from
  331. a buffer and place it in a variable. For example, if I have a buffer by
  332. the name of RIGEL2, and it contains the text:
  333.  
  334.     Richmond
  335.     Lafayette
  336.     <*>Bloomington        (where <*> is the current point)
  337.     Indianapolis
  338.     Gary
  339.     =* MicroEMACS 3.8 (WRAP) == rigel2 == File: /data/rigel2.txt =====
  340.  
  341.     and within a command I reference #rigel2, like:
  342.  
  343.     insert-string #rigel2
  344.  
  345.     MicroEMACS would start at the current point in the RIGEL2
  346. buffer and grab all the text up to the end of that line and pass that
  347. back.  Then it would advance the point to the beginning of the next line.
  348. Thus, after our last command executes, the string "Bloomington" gets
  349. inserted into the current buffer, and the buffer RIGEL2 now looks like
  350. this:
  351.  
  352.     Richmond
  353.     Lafayette
  354.     Bloomington
  355.     <*>Indianapolis        (where <*> is the current point)
  356.     Gary
  357.     =* MicroEMACS 3.8 (WRAP) == rigel2 == File: /data/rigel2.txt =====
  358.  
  359.     as you have probably noticed, a buffer variable consists of the
  360. buffer name, preceded by a pound sign (#).
  361.  
  362. x.04    Interactive variables
  363.  
  364.     Interactive variables are actually a method to prompt the user
  365. for a string.  This is done by using an at sign (@) followed either with
  366. a quoted string, or a variable containing a string.  The string is the
  367. placed on the bottom line, and the editor waits for the user to type in
  368. a string.  Then the string typed in by the users is returned as the
  369. value of the interactive variable.  For example:
  370.  
  371.     set %quest "What file? "
  372.     find-file @%quest
  373.  
  374.     will ask the user for a file name, and then attempt to find it.
  375.  
  376.  
  377. x.10    Functions
  378.  
  379.     Functions can be used to manipulate variables in various ways. 
  380. Functions can have one, two, or three arguments.  These arguments will
  381. always be placed after the function on the current command line.  For
  382. example, if we wanted to increase the current fill column by two, using
  383. emacs's set (^X-A) command, we would write:
  384.  
  385.     set $fillcol &add $fillcol 2
  386.          \      \      \      \     \____second operand
  387.            \      \      \      \________first operand
  388.              \      \      \_____________function to execute
  389.                \      \__________________variable to set
  390.                  \_______________________set (^X-A) command
  391.  
  392.     Function names always begin with the ampresand (&) character,
  393. and are only significant to the first three characters after the
  394. ampresand.  Functions will normal expect one of three types of
  395. arguments, and will automatically convert types when needed.
  396.  
  397.     <num>    an ascii string of digits which is interpeted as a
  398.         numeric value.  Any string which does not start with a
  399.         digit or a minus sign (-) will be considered zero.
  400.  
  401.     <str>    An arbitrary string of characters.  At the moment,
  402.         strings are limited to 128 characters in length.
  403.  
  404.     <log>    A logical value consisting of the string "TRUE" or
  405.         "FALSE". Numeric strings will also evaluate to "FALSE"
  406.         if they are equal to zero, and "TRUE" if they are
  407.         non-zero. Arbitrary text strings will have the value of
  408.         "FALSE".
  409.  
  410.     A list of the currently availible functions follows: (Once
  411. again, send in those votes on what kind of functions you would like to
  412. see added!)
  413.  
  414. Numeric Functions:    (returns <num>)
  415.  
  416. &ADD        <num> <num>    Add two numbers
  417. &SUB        <num> <num>    Subtract the second number from the first
  418. &TIMes        <num> <num>    Multiply two numbers
  419. &DIVide        <num> <num>    Divide the first number by the second
  420.                 giving an integer result
  421. &MOD        <num> <num>    Return the reminder of dividing the
  422.                 first number by the second
  423. &NEGate        <neg>        Multiply the arg by -1
  424.  
  425.  
  426. String manipulation functions:    (returns <str>)
  427.  
  428. &CAT        <str> <str>    Concatinate the two strings to form one
  429. &LEFt        <str> <num>    return the <num> leftmost characters
  430.                 from <str>
  431. &RIGht        <str> <num>    return the <num> rightmost characters
  432.                 from <str>
  433. &MID        <str> <num1> <num2>
  434.                 Starting from <num1> position in <str>,
  435.                 return <num2> characters.
  436.  
  437. Logical Testing functions:    (returns <log>)
  438.  
  439. &NOT        <log>        Return the opposite logical value
  440. &EQUal        <num> <num>    If <num> and <num> are numerically
  441.                 equal, return TRUE
  442. &LESs        <num1> <num2>    If <num1> is less than <num2>, return
  443.                 TRUE.
  444. &GREater    <num1> <num2>    If <num1> is greater than, or equal to
  445.                 <num2>, return TRUE.
  446. &SEQual        <str1> <str2>    If the two strings are the same, return
  447.                 TRUE.
  448. &SLEss        <str1> <str2>    If <str1> is less alphabetically than
  449.                 <str2>, return TRUE.
  450. &SGReater    <str1> <str2>    If <str1> is alphabetically greater than
  451.                 or equal to <str2>, return TRUE.
  452.  
  453. Special Functions:
  454.  
  455. &INDirect    <str>        Evaluate <str> as a variable.
  456.  
  457.     This last function deserves more explaination. The &IND function
  458. evaluates its argument, takes the resulting string, and then uses it as
  459. a variable name.  For example, given the following code sequence:
  460.  
  461.     ; set up reference table
  462.  
  463.     set %one    "elephant"
  464.     set %two     "giraffe"
  465.     set %three     "donkey"
  466.  
  467.     set %index "two"
  468.     insert-string &ind %index
  469.  
  470.     the string "giraffe" would have been inserted at the point in
  471. the current buffer.  This indirection can be safely nested up to about
  472. 10 levels.
  473.  
  474. x.20    Directives
  475.  
  476.     Directives are commands which only operate within an executing
  477. macro, ie they do not make sense as a single command. As such, they
  478. cannot be called up singly or bound to keystroke. Used within macros,
  479. they control what lines are executed and in what order.
  480.  
  481.     Directives always start with the exlaimation mark (!) character
  482. and must be the first thing placed on a line. Directives executed singly
  483. (via the execute-command-line command) interactively will be ignored.
  484.  
  485. x.21    !ENDM Directive
  486.  
  487.     This directive is used to terminate a macro being stored. For
  488. example, if a file is being executed contains the text:
  489.  
  490.     ;    Read in a file in view mode, and make the window red
  491.     26    store-macro
  492.         find-file @"File to view: "
  493.         add-mode "view"
  494.         add-mode "red"
  495.     !endm
  496.  
  497.     write-message "[Consult macro has been loaded]"
  498.  
  499.     only the lines between the store-macro command and the !ENDM
  500. directive are stored in macro 26.
  501.  
  502. x.22    !FORCE Directive
  503.  
  504.     When MicroEMACS executes a macro, if any command fails, the
  505. macro is terminated at that point. If a line is preceeded by a !FORCE
  506. directive, execution continues weather the command succeeds or not. For
  507. example:
  508.  
  509.     ;    Merge the top two windows
  510.  
  511.     save-window        ;remember what window we are at
  512.     1 next-window        ;go to the top window
  513.     delete-window        ;merge it with the second window
  514.     !force restore-window    ;This will continue irregardless
  515.     add-mode "red"
  516.  
  517. x.23    !IF, !ELSE, and !ENDIF Directives
  518.  
  519.     This directive allows statements only to be executed if a
  520. condition specified in the directive is met.  Every line following the
  521. !IF directive, until the first !ELSE or !ENDIF directive, is only
  522. executed if the expresion following the !IF directive evaluates to a
  523. TRUE value.  For example, the following macro segment creates the
  524. portion of a text file automatically.  (yes believe me, this will be
  525. easier to understand then that last explaination....)
  526.  
  527.     !if &sequal %curplace "timespace vortex"
  528.         insert-string "First, rematerialize~n"
  529.     !endif
  530.     !if &sequal %planet "earth"    ;If we have landed on earth...
  531.         !if &sequal %time "late 20th century"  ;and we are then
  532.             write-message "Contact U.N.I.T."
  533.         !else
  534.             insert-string "Investigate the situation....~n"
  535.             insert-string "(SAY 'stay here Sara')~n"
  536.         !endif
  537.     !else
  538.         set %conditions @"Atmosphere conditions outside? "
  539.         !if &sequal %conditions "safe"
  540.             insert-string &cat "Go outside......" "~n"
  541.             insert-string "lock the door~n"
  542.         !else
  543.             insert-string "Dematerialize..try somewhen else"
  544.             newline
  545.         !endif
  546.     !endif
  547.  
  548. x.24    !GOTO Directive
  549.  
  550.     Flow can be controlled within a MicroEMACS macro using the !GOTO
  551. directive. It takes as an argument a label. A label consists of a line
  552. starting with an asterick (*) and then an alphanumeric label.  Only
  553. labels in the currently executing macro can be jumped to, and trying to
  554. jump to a non-existing label terminates execution of a macro.  For
  555. example..
  556.  
  557.     ;Create a block of DATA statements for a BASIC program
  558.  
  559.         insert-string "1000 DATA "
  560.         set %linenum 1000
  561.  
  562.     *nxtin
  563.         update-screen        ;make sure we see the changes
  564.         set %data @"Next number: "
  565.         !if &equal %data 0
  566.             !goto finish
  567.         !endif
  568.  
  569.         !if &greater $curcol 60
  570.             2 delete-previous-character
  571.             newline
  572.             set %linenum &add %linenum 10
  573.             insert-string &cat %linenum " DATA "
  574.         !endif
  575.  
  576.         insert-string &cat %data ", "
  577.         !goto nxtin
  578.  
  579.     *finish
  580.  
  581.         2 delete-previous-character
  582.         newline
  583.  
  584. x.25    !RETURN Directive
  585.  
  586.     The !RETURN Directive causes the current macro to exit, either
  587. returning to the caller (if any) or to interactive mode.  For example:
  588.  
  589.     ;    Check the monitor type and set %mtyp
  590.  
  591.     !if &sres "CGA"
  592.         set %mtyp 1
  593.         !return
  594.     !else
  595.         set %mtyp 2
  596.     !endif
  597.  
  598.     insert-string "You are on a MONOCHROME machine!~n"
  599.  
  600. <<<END OF MANUAL EXCERPT>>>
  601.